package com.xjy.system.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.xjy.common.utils.PageUtils;
import com.xjy.common.core.page.PagePlus;
import com.xjy.common.core.page.TableDataInfo;
import com.xjy.system.domain.SysImageType;
import com.xjy.system.domain.bo.SysImageMngAddBo;
import com.xjy.system.domain.bo.SysImageMngEditBo;
import com.xjy.system.domain.bo.SysImageMngQueryBo;
import com.xjy.system.domain.vo.SysImageMngVo;
import com.xjy.system.domain.vo.SysImageTypeVo;
import com.xjy.system.domain.vo.SysMaterialUpdateVo;
import com.xjy.system.service.ISysImageMngService;
import com.xjy.system.service.ISysProjService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xjy.common.core.mybatisplus.core.ServicePlusImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

import com.xjy.system.domain.SysImageMng;
import com.xjy.system.mapper.SysImageMngMapper;


import java.util.List;
import java.util.Map;
import java.util.Collection;

/**
 * 影像管理信息Service业务层处理
 *
 * @author zc
 * @date 2022-02-07
 */
@Service
public class SysImageMngServiceImpl extends ServicePlusImpl<SysImageMngMapper, SysImageMng> implements ISysImageMngService {
	@Autowired
	private ISysProjService iSysProjService;

	@Override
	public SysImageMngVo queryById(Long id) {
		SysImageMngVo rsp = null;
		SysImageMngQueryBo sysImageMngQueryBo = new SysImageMngQueryBo();
		sysImageMngQueryBo.setId(id);
		List<SysImageMngVo> list = baseMapper.queryPageList(sysImageMngQueryBo);
		if (null != list && list.size() > 0) {
			rsp = list.get(0);
		}
		return rsp;
	}

	@Override
	public TableDataInfo<SysImageMngVo> queryPageList(SysImageMngQueryBo bo) {
		PagePlus<SysImageMng, SysImageMngVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo), SysImageMngVo.class);
		return PageUtils.buildDataInfo(result);
//		List<SysImageMngVo> list = baseMapper.queryPageList(bo);
//		return PageUtils.buildDataInfo(list);
	}

	@Override
	public List<SysImageMngVo> queryList(SysImageMngQueryBo bo) {
		return listVo(buildQueryWrapper(bo), SysImageMngVo.class);
	}

	private LambdaQueryWrapper<SysImageMng> buildQueryWrapper(SysImageMngQueryBo bo) {
		Map<String, Object> params = bo.getParams();
		LambdaQueryWrapper<SysImageMng> lqw = Wrappers.lambdaQuery();
		lqw.eq(bo.getProjId() != null, SysImageMng::getProjId, bo.getProjId());
		lqw.eq(StrUtil.isNotBlank(bo.getImage()), SysImageMng::getImage, bo.getImage());
		lqw.eq(StrUtil.isNotBlank(bo.getType()), SysImageMng::getType, bo.getType());
		lqw.like(StrUtil.isNotBlank(bo.getLabel()), SysImageMng::getLabel, bo.getLabel());
		lqw.like(StrUtil.isNotBlank(bo.getOperator()), SysImageMng::getOperator, bo.getOperator());
		lqw.eq(bo.getOperatorId() != null, SysImageMng::getOperatorId, bo.getOperatorId());
		lqw.eq(bo.getUploadTime() != null, SysImageMng::getUploadTime, bo.getUploadTime());
		lqw.like(StrUtil.isNotBlank(bo.getProjName()), SysImageMng::getProjName, bo.getProjName());
		lqw.eq(bo.getAuditStatus() != null, SysImageMng::getAuditStatus, bo.getAuditStatus());
		return lqw;
	}

	@Override
	public Boolean insertByAddBo(SysImageMngAddBo bo) {
		SysImageMng add = BeanUtil.toBean(bo, SysImageMng.class);
		add.setProjName(iSysProjService.queryById(bo.getProjId()).getName());
		add.setUploadTime(DateUtil.date());
		validEntityBeforeSave(add);
		return save(add);
	}

	@Override
	public Boolean updateByEditBo(SysImageMngEditBo bo) {
		SysImageMng update = BeanUtil.toBean(bo, SysImageMng.class);
		update.setProjName(iSysProjService.queryById(bo.getProjId()).getName());
		return baseMapper.update(update);
	}

	/**
	 * 保存前的数据校验
	 *
	 * @param entity 实体类数据
	 */
	private void validEntityBeforeSave(SysImageMng entity) {
		//TODO 做一些数据校验,如唯一约束
	}

	@Override
	public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
		if (isValid) {
			//TODO 做一些业务上的校验,判断是否需要校验
		}
		return removeByIds(ids);
	}
}
